package tech.waterism.topo.model;

import lombok.Data;

import java.util.List;

/**
 * 联合调度组
 * 
 * <p>表示需要联合调度的多个节点组成的群组（如多个梯级水库）
 * 
 * @author waterism
 * @since 1.0.0
 */
@Data
public class JointDispatchGroup {
    
    /** 联调组ID */
    private Integer jmsid;
    
    /** 联调组名称 */
    private String name;
    
    /** 上游起点站码列表（用于判断何时触发联调） */
    private List<String> upstreamNodes;
    
    /** 联调节点列表（按拓扑顺序） */
    private List<TopoNode> nodes;
    
    /** 联调终点站码 */
    private String endStcd;
    
    /** 是否需要计算 */
    private Boolean calculate;
    
    /**
     * 判断所有上游节点是否都已计算
     * 
     * @param context 计算上下文
     * @return true表示所有上游节点都已计算完成，可以触发联调
     */
    public boolean allUpstreamCalculated(tech.waterism.topo.context.CalculationContext context) {
        if (upstreamNodes == null || upstreamNodes.isEmpty()) {
            return false;
        }
        for (String stcd : upstreamNodes) {
            if (!context.isCached(stcd)) {
                return false;
            }
        }
        return true;
    }
}

